# 自动测试GUI搜索功能的脚本
import sys
import os
import time
import threading

# 添加src目录到Python路径
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'src'))

def simulate_gui_search():
    """模拟GUI搜索功能，通过修改main_gui中的关键函数实现自动测试"""
    print("\n=== 开始自动测试GUI搜索功能 ===")
    
    # 导入必要的模块和函数
    try:
        from src.ui.gui.main_gui import run_gui_app
        print("✅ 成功导入GUI模块")
    except ImportError as e:
        print(f"❌ 导入GUI模块失败: {e}")
        return False
    
    # 定义测试关键词列表
    test_keywords = [
        "",             # 空搜索
        "54",           # 部分角色名
        "提供",          # 游戏名称
        "dfc4af96",     # 角色ID
        "不存在的关键词"  # 不存在的关键词
    ]
    
    # 保存原始的handle_search函数
    original_handle_search = None
    
    # 模拟搜索操作的函数
    def mock_search_operations():
        """在GUI启动后自动执行搜索操作"""
        import tkinter as tk
        from src.ui.gui.main_gui import app_state, handle_search, search_frame
        
        print("\n🔍 开始模拟搜索操作...")
        print(f"当前加载的角色数量: {len(app_state['characters'])}")
        
        # 等待GUI完全初始化
        time.sleep(2)
        
        # 执行一系列搜索测试
        for keyword in test_keywords:
            print(f"\n📝 测试搜索关键词: '{keyword}'")
            try:
                # 调用搜索函数
                handle_search(keyword)
                # 检查搜索结果
                if not keyword.strip():
                    # 空搜索应该显示所有角色
                    print(f"  空搜索结果数量: {len(app_state['search_results']) if 'search_results' in app_state else '未设置'}")
                else:
                    # 非空搜索检查搜索结果
                    results = app_state.get('search_results', [])
                    print(f"  搜索结果数量: {len(results)}")
                    for i, char in enumerate(results[:3]):  # 只显示前3个结果
                        print(f"  结果 {i+1}: {char['char_name']} (ID: {char['id']}, 游戏: {char['game_name']})")
                
                # 更新搜索框内容（如果可能）
                if search_frame and hasattr(search_frame, 'search_var'):
                    search_frame.search_var.set(keyword)
                
                # 暂停一下，让GUI有时间更新
                time.sleep(1)
                
            except Exception as e:
                print(f"❌ 搜索 '{keyword}' 时出错: {e}")
        
        # 完成测试后关闭应用
        print("\n✅ 搜索测试完成")
        time.sleep(2)  # 给用户时间查看结果
        root = tk._default_root
        if root:
            root.quit()
    
    # 修改main_gui模块中的run_gui_app函数，添加自动测试
    def patched_run_gui_app():
        """修补后的run_gui_app函数，会在启动后自动执行测试"""
        from src.ui.gui.main_gui import run_gui_app as original_run_gui_app
        
        # 启动一个线程来执行测试操作
        test_thread = threading.Thread(target=mock_search_operations)
        test_thread.daemon = True
        test_thread.start()
        
        # 运行原始的GUI应用
        original_run_gui_app()
    
    # 替换main_gui模块中的run_gui_app函数
    import src.ui.gui.main_gui
    src.ui.gui.main_gui.run_gui_app = patched_run_gui_app
    
    # 运行修补后的GUI应用
    print("\n🚀 启动GUI应用并执行自动搜索测试...")
    print("将自动测试以下关键词:", ", ".join([f"'{k}'" if k else "空搜索" for k in test_keywords]))
    print("请观察搜索结果和日志输出")
    
    try:
        run_gui_app()
        print("\n✅ GUI应用正常退出")
        return True
    except Exception as e:
        print(f"❌ GUI应用运行出错: {e}")
        return False

if __name__ == "__main__":
    success = simulate_gui_search()
    print(f"\n=== 自动测试完成 ===")
    print(f"测试结果: {'通过' if success else '失败'}")
    print("\n如果测试通过，GUI搜索功能应该已经正常工作。")
    print("如果仍然有问题，请检查是否有以下原因:")
    print("1. 角色数据文件是否正确加载")
    print("2. 搜索框事件绑定是否正确")
    print("3. 搜索结果是否正确显示在表格中")
    sys.exit(0 if success else 1)